	// 引入qrcode-decoder
	import QrCode from '@/node_modules/qrcode-decoder/dist/index';

	/**
	 * @param {String} str 传入的字符串
	 * @return {Boolean} 
	 */
	const isURL = (str) => {
		var pattern = new RegExp(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gi); // fragment locator
		return pattern.test(str);
	}


	const urlToFile = (url, callback) => { // 建议封装，全局使用
		const image = new Image() // 初始化一个image图像
		image.crossOrigin = '*' // 这个是为了解决图片的跨域问题，有些时候不生效，则需要后端配置
		image.src = url
		image.onload = function() { // 当然在图片加载完成后去执行以下代码
			const canvas = document.createElement('canvas') // 将image图像转化成canvas图像
			canvas.width = image.width // canvas长宽与image保持一致
			canvas.height = image.height
			const ctx = canvas.getContext('2d')
			ctx.drawImage(image, 0, 0, image.width, image.height)
			const ext = image.src.substring(image.src.lastIndexOf('.') + 1).toLowerCase()
			const dataURL = canvas.toDataURL('image/' + ext) // 如果你的图片格式是固定的，如jpg、png，则可以直接替换这里的ext，直接写成例如image/png。
			const type = 'image/' + ext
			const bytes = window.atob(dataURL.split(',')[1]) // 去掉url的头，并转换为byte
			const ab = new ArrayBuffer(bytes.length) //初始化一个bytes的二进制数组ArrayBuffer
			const ia = new Uint8Array(ab) // 初始化，ab转为Uint8Array数组类型
			for (let i = 0; i < bytes.length; i++) {
				ia[i] = bytes.charCodeAt(i)
			}
			const tempBlob = new Blob([ia], {
				type: type
			}) // 关键，初始化一个blob对象，blob支持文件操作
			const blob = tempBlob
			var file = new File([blob], 'filename', {
				type: type,
				lastModified: Date.now()
			}) // 通过blob创建一个file文件
			callback(file) // 为何用callback 而不是return？因为上面的onload中是闭包，我们无法直接return这个file
		}
	}

	const identifyQR = (file) => {
		// 获取临时路径 chrome有效，其他浏览器的方法请自行查找
		const url = window.webkitURL.createObjectURL(file)
		console.log(url)
		// 初始化
		const qr = new QrCode()
		// 解析二维码，返回promise
		return qr.decodeFromImage(url) //注意 这里返回的是一个promise对象
	}

	const onDecoder = (url) => {
		return new Promise(function(resolve, reject) {
			try {
				urlToFile(url, (file) => { // 通过箭头函数拿到callback返回的值
					identifyQR(file).then(r => { // 返回值为promise对象，所以通过.then获取
						if (r.data) { // 其中写你的操作，若有值，则说明是存在二维码的，可以先存起来获取到的二维码的值，便于其他地方操作及使用
							resolve({
								success: true,
								data: r.data
							})
						} else {
							resolve({
								success: false,
							})
						}
					})
				})
			} catch (e) {
				//TODO handle the exception
				resolve({
					success: false,
				})
			}

		});

	}

	export {
		onDecoder,
		isURL
	}